package requisicao;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import util.Util;

public class Cabecalho {

	private String comando="", recurso="", protocolo="";
	private Map<String, String> dados = new HashMap<String, String>();
	private String linha;
	private InputStream in;
	
	public Cabecalho(){
		
	}
	
	public Cabecalho(Requisicao requisicao) throws IOException{	
		in = requisicao.getIn();
		executa();
	}
	
	public void executa() throws IOException{		
		definirCabecalho();
		definirAtributos();
	}
	private void definirCabecalho() throws IOException{
		linha = null;
		linha = Util.lerLinha(in);
		if(linha!=null){			
			String[] linhaInicial = linha.split(" ");
			setComando(linhaInicial[0].trim());
			setRecurso(linhaInicial[1].trim());
			setProtocolo(linhaInicial[2].trim());			
		}
		System.out.println(comando+" "+recurso+" "+protocolo);
	}
	private void definirAtributos() throws IOException{
		linha = null;
		while((linha = Util.lerLinha(in)) != null){
			if(linha.equals("")){
				break;
			}
			String[] dados = linha.split(":");
			addDado(dados[0], dados[1]);
			System.out.println("linha: "+linha);
		}	
	}
	
	public String getProtocolo() {
		return protocolo;
	}

	public void setProtocolo(String protocolo) {
		this.protocolo = protocolo;
	}

	public String getComando() {
		return comando;
	}
	public void setComando(String comando) {
		this.comando = comando;
	}
	public String getRecurso() {
		return recurso;
	}
	public void setRecurso(String recurso) {
		this.recurso = recurso;
	}
	public Map<String, String> getDados() {
		return dados;
	}
	public void setDados(Map<String, String> dados) {
		this.dados = dados;
	}	
	public void addDado(String chave, String valor){
		dados.put(chave, valor);
	}
	public String getValor(String chave){
		String resultado = null;
		resultado = dados.get(chave);	
		
		if(resultado == null){
			return "0";
		}else{
			return resultado;
		}
		
	}
	@Override
	public String toString() {
		String cabecalho = "";
		cabecalho = comando+" "+recurso+" "+protocolo+"\n";
		Set<Map.Entry<String, String>> set = dados.entrySet();
		
		for (Map.Entry<String, String> valores : set) {
			cabecalho = cabecalho+valores.getKey()+":"+valores.getValue()+"\n";
		}
		return cabecalho;
	}
}
